﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using Dapper;
using ProjetoSolo.QueroGas.Dominio.Entidades;
using ProjetoSolo.QueroGas.Dominio.Repositorios;
using ProjetoSolo.QueroGas.Infraestrutura.PersistenciaAdo.Extensions;

namespace ProjetoSolo.QueroGas.Infraestrutura.PersistenciaAdo.Repositorios
{
    public class RepositorioProduto : IRepositorioProduto
    {
        private readonly ContextoAdo contexto;

        public RepositorioProduto(IContextoRepositorio contexto)
        {
            this.contexto = (ContextoAdo) contexto;
        }

        public Produto PegarPorCodigo(int codigoProduto)
        {
            return this.contexto.Conexao.Query<Produto>("select IdProduto, Nome, Descricao from Produto")
                .FirstOrDefault(p => p.IdProduto == codigoProduto);
        }

        public IEnumerable<Produto> PegarListaCompleta()
        {
            return this.contexto.Conexao.Query<Produto>("select IdProduto, Nome, Descricao from Produto");
        }

        public int Cadastrar(Produto produto)
        {
            if (this.ProdutoJahExiste(produto))
                return 0;

            return this.contexto.Conexao.Query<int>("insert into Produto output inserted.IdProduto values(@Nome, @Descricao, @Categoria)", 
                produto, this.contexto.Transacao()).First(); ;
        }

        public int PegarCodigoProduto(Produto produto)
        {            
            return this.contexto.Conexao.Query<int>("select IdProduto from Produto where Nome = @Nome and Descricao = @Descricao", 
                produto, this.contexto.Transacao()).First();
        }

        private bool ProdutoJahExiste(Produto produto)
        {
            return this.contexto.Conexao.Query<int>("Select IdProduto From Produto Where Nome = @Nome and Descricao = @Descricao",
                produto, this.contexto.Transacao()).Any();
        }
    }
}
